//package com.xhwl.data.config;
//
//import lombok.Setter;
//import org.apache.commons.collections4.CollectionUtils;
//import org.apache.ibatis.cache.Cache;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.context.ApplicationContext;
//import org.springframework.context.annotation.Lazy;
//import org.springframework.core.annotation.Order;
//import org.springframework.data.redis.connection.RedisServerCommands;
//import org.springframework.data.redis.core.RedisCallback;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Component;
//
//import java.util.Set;
//import java.util.concurrent.locks.ReadWriteLock;
//import java.util.concurrent.locks.ReentrantReadWriteLock;
//
///**
// * @Author: luyi
// * @Description:
// * @Date: Create in 11:36 2021/7/21
// */
//public class RedisCache implements Cache {
//
//    /**
//     * 日志
//     */
//    private static final Logger log = LoggerFactory.getLogger(RedisCache.class);
//
//    /**
//     * 读写锁
//     */
//    private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
//    /**
//     * ID,获取缓存对象的唯一标识
//     */
//    @Setter
//    private String id;
//
//    /**
//     * redisTemplate
//     */
//    private RedisTemplate redisTemplate;
//
//    public RedisCache(){}
//
//    public RedisCache(String id) {
//        if (id == null) {
//            throw new IllegalArgumentException("缓存实例需要一个id!");
//        } else {
//            log.info("开启Redis缓存: id = {}", id);
//            this.id = id;
//        }
//    }
//
//    @Override
//    public String getId() {
//        return this.id;
//    }
//
//    @Override
//    public int getSize() {
//        if(null == redisTemplate){
//            redisTemplate = BeanContext.getBean(RedisTemplate.class);
//        }
//        try {
//            Long size = redisTemplate.opsForHash().size(this.id.toString());
//            log.info("Redis缓存大小: id = {}, size = {}", id, size);
//            return size.intValue();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return 0;
//    }
//
//    @Override
//    public void putObject(Object key, Object value) {
//        if(null == redisTemplate){
//            redisTemplate = BeanContext.getBean(RedisTemplate.class);
//        }
//        if (value != null) {
//            redisTemplate.opsForValue().set(key.toString(), value);
//        }
//    }
//
//    @Override
//    public Object getObject(Object key) {
//        try {
//            if (key != null) {
//                return redisTemplate.opsForValue().get(key.toString());
//            }
//        } catch (Exception e) {
//            log.error("缓存出错 {}", e.getMessage());
//        }
//        return null;
//    }
//
//    @Override
//    public Object removeObject(Object key) {
//        if(null == redisTemplate){
//            redisTemplate = BeanContext.getBean(RedisTemplate.class);
//        }
//        if (key != null) {
//            redisTemplate.delete(key.toString());
//        }
//        return null;
//    }
//
//    @Override
//    public void clear() {
//        log.debug("清空缓存");
//        if(null == redisTemplate){
//            redisTemplate = BeanContext.getBean(RedisTemplate.class);
//        }
//        Set<String> keys = redisTemplate.keys("*:" + this.id + "*");
//        if (!CollectionUtils.isEmpty(keys)) {
//            redisTemplate.delete(keys);
//        }
//    }
//
//    @Override
//    public ReadWriteLock getReadWriteLock() {
//        return this.readWriteLock;
//    }
//
//}
